Стоит задача получить со страницы url(несколько), перейти по ним, распарсить, проверить, отправить форму и снова проверить ответ.
Так вот, делаю так:
var xhr // Глобальный идентификатор XMLHttpRequest
var xhrId // Глобальный идентификатор запроса
function GetHttpRequest(href, id) // Формирование запроса(url запроса, id запроса)
{
xhr = new XMLHttpRequest()
xhr.withCredentials = true
xhr.onreadystatechange = ProcessRequestChange
xhr.open('GET', href, true)
xhr.send(null)
xhrId = id // Записать id в глобальную переменную
}
function ProcessRequestChange() // Общий обработчик
{
if(xhr.readyState != 4) return // Если запрос не выполнен - игнор
if(xhr.status == 200) // Всё хорошо, запрос отправлен, ответ пришел
{
html = xhr.responseText // Получить текст ответа
switch(xhrId)
{
case 999: // Получить район(первый запрос)
{
var a
if((a = html.indexOf('Район: ')) != -1)
{
var s = html.indexOf('<b><a href=\'', a) + 12
var e = html.indexOf('\'>', s)
var str = html.substring(s, e).replace('amp;', '')
GetHttpRequest('http://www.site.ru/' + str + '&st=sh', 998) // Получить все объекты в производстве
}
break
}
case 998: // Получить все предприятия в производстве(второй запрос)
{
var s = 0, id = 0
while((s = html.indexOf('info.php?id=', s)) != -1) // Получить все ссылки
{
var e = html.indexOf('\'>', s)
var str = html.substring(s, e)
s = e
if(str.length > 23) continue // Когда на объект можно устроиться ссылки дублируются...
GetHttpRequest('http://www.site.ru/' + str, 100 + id++) // Запрос на предприятие производства
}
break
}
case 100: // Обработка предприятий производства, искать формы отправки
{
// И вот тут я впёрся, запросы - то приходят не сразу + вразнобой, а id запроса меняется
break
}
case 0: break // Без обработки
}
}
}
chrome.runtime.onMessage.addListener // Сообщение из другого скрипта(по нажатию кнопки)
(
function(request, sender, sendResponse)
{
GetHttpRequest('http://www.site.ru/map.php', 999) // Получить район(первый запрос)
}
)
Получаю значит последовательно:страницу(и з неё дергаю адрес), потом получаю несколько ссылок, и делаю запросы в цикле.
И вот тут у меня всё пошло не по плану, запросы приходят не сразу + вразнобой, а id запроса перезаписывается.
В итоге: код в обработчике сможет выполниться только для последнего запроса...
Может есть варианты по другому как - то ид передавать?
+Не подскажите как свитчить диапазон чисел?
В JS оно как - то по другому делается чем во всех других языках(понятно, код - то не компилируется).
В общем как мне это сделать?
case: 100..120:
Так?
switch(xhrId)
{
case 999: break
case 998: break
case xhrId > 99 && xhrId < 121: break
}